package EventLoopTest.Test003;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import io.netty.util.concurrent.ScheduledFuture;

import java.util.concurrent.TimeUnit;

public class EventLoopTaskExample {
    public static void main(String[] args) {
        EventLoopGroup group = new NioEventLoopGroup(1);
        EventLoop eventLoop = group.next();
        
        // 1. 立即执行的任务
        eventLoop.execute(() -> {
            System.out.println("立即执行任务 - 线程: " + Thread.currentThread().getName());
        });

        // 2. 定时任务 - 延迟执行
        ScheduledFuture<?> future = eventLoop.schedule(() -> {
            System.out.println("延迟3秒执行 - 线程: " + Thread.currentThread().getName());
        }, 3, TimeUnit.SECONDS);

        // 3. 定时任务 - 固定频率
        eventLoop.scheduleAtFixedRate(() -> {
            System.out.println("固定频率执行 - 线程: " + Thread.currentThread().getName());
        }, 1, 2, TimeUnit.SECONDS);

        // 4. 在 Channel 的 EventLoop 中执行任务
        Bootstrap bootstrap = new Bootstrap();
        bootstrap.group(group)
                 .channel(NioSocketChannel.class)
                 .handler(new ChannelInitializer<SocketChannel>() {
                     @Override
                     protected void initChannel(SocketChannel ch) {
                         ch.pipeline().addLast(new SimpleChannelInboundHandler<String>() {
                             @Override
                             protected void channelRead0(ChannelHandlerContext ctx, String msg) {
                                 // 在 Channel 的 EventLoop 中执行任务
                                 ctx.channel().eventLoop().execute(() -> {
                                     System.out.println("在 Channel 的 EventLoop 中执行");
                                 });
                             }
                         });
                     }
                 });
    }
}